package tool;

import java.io.*;
import java.util.Properties;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import java.net.URLEncoder;
import java.net.URLDecoder;
import java.io.UnsupportedEncodingException;


public class StringTool {
	
	/**
	 * 生成随机字符串（纯字母）
	 * @param length 字符串长度
	 * @return
	 */
	public static String getRandom(int length){
		 String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
		 Random random = new Random();   
		    StringBuffer sb = new StringBuffer();   
		    for (int i = 0; i < length; i++) {   
		        int number = random.nextInt(base.length());   
		        sb.append(base.charAt(number));   
		    }   
		    return sb.toString();   
	}
	
	
	/**功能：URL编码
	 * 注意带参数的URL需要分段编码
	 * @param url
	 * @return
	 */
	public static String urlEncoder(String url){
	try {
		return URLEncoder.encode(url,"UTF-8");
		} catch (UnsupportedEncodingException e) {
		throw new RuntimeException("URL－UTF－8编码失败");
		}
	}
	
	public static String urlDecoder(String url){
		try {
			return URLDecoder.decode(url,"UTF-8");
			} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("UTF－8解码失败");
			}
		}
	
	

	/**
	 * @param args
	 */

	public static String arrToStr(String[] strArray){
		if(strArray==null) return "";
		String s="";
		for(int i=0;i<strArray.length;i++){
			if(i<strArray.length-1)
				s=s+strArray[i]+",";
			else
				s=s+strArray[i];
		}
		return s;
		
	}
	

	
	
	
	// 134/135/136/137/138/139/150/151、152、157、158、159、182、183、187、188、147（数据卡）
	// 中国联通：130、131、132、155、156、185（3G）、186（3G）、145（数据卡）。中国电信：133、153、180、181、189
	// 中国卫星通信：1349。

	// 验证手机号是否符合格式
	@Deprecated
	public static boolean isMobileNO(String mobiles) {
		Pattern p = Pattern
				.compile("^((13[0-9])|(14[5,7])|(15[^4,\\D])|(18[^4,\\D]))\\d{8}$");
		Matcher m = p.matcher(mobiles.trim());
		System.out.println(m.matches() + "---");
		return m.matches();
	}

	// 姓、名分别都要验证 是否合乎姓名格式 先去空格 然后必须是中文 且不再forbidName.properties定义的词中
	@Deprecated
	public static boolean isName(String name) throws IOException {
//		boolean isHanzi = false; // 是否汉字
//		boolean isMingan = false; // 是否敏感
//		String newName = name.replaceAll(" ", "").trim(); // 去中间及两边空格
//		String reg = "[\\u4e00-\\u9fa5]+";// 表示+表示一个或多个中文
//		isHanzi = newName.matches(reg);
//		if(isHanzi==false){
//			return false;
//		}
//		// String mgc="先生,老板,女士,某某"; //敏感词过滤 不要硬编码 forbidName.properties
//		Resource rs = new ClassPathResource("bean-config.xml");
//		BeanFactory factory = new XmlBeanFactory(rs);
//		ForbidName forbidName = (ForbidName) factory.getBean("forbidName");
//		String[] forbid = forbidName.getForbidname().split("/");
//
//		for (String s : forbid) {
//			if(newName.indexOf(s)!=-1)
//				return false;
//		}
		return true;
		
	
		

	}
	
	
	public static String SHA1(String decript) {
        try {
            MessageDigest digest = java.security.MessageDigest
                    .getInstance("SHA-1");
            digest.update(decript.getBytes());
            byte messageDigest[] = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();
 
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
	

	public static void main(String[] args) throws IOException {
		System.out.println(StringTool.getRandom(6));
		
		// // TODO Auto-generated method stub
		// String str = "55+t5Y+R55+t5Y+R";
		// StringBuffer bu = new StringBuffer(str).reverse();
		// System.out.println(StringTool.isMobileNO("18900000000"));
//		
//		String jsapi_ticket="sM4AOVdWfPE4DxkXGEs8VG1Qq_A1XyM1zoDi5gTgGtd5nXkPW58y9McWdAgVeU9WoKLt4T3CSVVd8lYtQOEq_g";
//		String noncestr="Wm3WZYTPz0wzccnW";
//		String timestamp="1414587457";
//		String url="http://we.51waji.com/microhifo/wexintest.html";
//		
////		System.out.println(StringTool.arrToStr(new String[]{"aa","bb"}));
//		System.out.println(StringTool.SHA1(jsapi_ticket+noncestr+timestamp+url));
//		System.out.println(StringTool.urlEncoder("http://we.51waji.com/microhifo/test_openid"));
//		System.out.println(StringTool.urlDecoder("http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php"));
		
		
	}

}
